import { defineStore } from 'pinia'
import { ref } from 'vue'
import { getLoginUserUsingGet } from '@/api/userController'

export const useUserStore = defineStore('user', () => {
  // 初始化时从 sessionStorage 获取 token
  const token = ref<string>(sessionStorage.getItem('token') || '')
  const userInfo = ref<API.LoginUserVO | null>(null)

  // 设置 token
  const setToken = (newToken: string) => {
    token.value = newToken
    sessionStorage.setItem('token', newToken)
  }

  // 清除 token
  const clearToken = () => {
    token.value = ''
    userInfo.value = null
    sessionStorage.removeItem('token')
  }

  // 获取当前登录用户信息
  const fetchUserInfo = async () => {
    try {
      // 只有当token存在时才获取用户信息
      if (token.value) {
        const res = await getLoginUserUsingGet()
        // @ts-ignore
        userInfo.value = res.data
        return res.data
      }
      return null
    } catch (error) {
      // 错误处理由拦截器统一处理
      return null
    }
  }

  return {
    token,
    userInfo,
    setToken,
    clearToken,
    fetchUserInfo
  }
})
